RDS には DB インスタンスクラスも DB インスタンスタイプもあるけど DB インスタンスファミリーはない
コンバンハ、千葉(幸)です。
先日、EC2 のインスタンスファミリーはどこのことを指すのかを調べました。「C5d.xlarge」で考えた場合、C
を指すこともあればC5d
を指すこともありました。
では RDS における「インスタンスファミリー」はどういった考え方なんだろう、というのが気になってきたので、今回はそれを調べます。
まとめ
イメージは以下です。
- ドキュメントの定義に則れば、DBインスタンスクラスは以下から構成される
- DBインスタンスタイプ(DBインスタンスクラスタイプとも)
- サイズ
- DB インスタンスクラスのことを指して DB インスタンスタイプと表現されることもある
- DB インスタンスファミリーという言葉は厳密にはない
- db.r6g.2xlarge を例にとると、
db.r6g
を指すのは「DB インスタンスタイプ」r
だけを指してrクラス
という表現がされることもあるR*
インスタンスファミリーという表現がされることもあるR6g
インスタンスファミリーという表現がされることもある
- このあたりの表現は場合によって変わるので、あまり厳密に考えず文脈から判断しよう
ちなみに EC2 の場合の考え方は以下です。「狭義/広義」はわたしが勝手にそう呼んでいるだけです。
DB インスタンスタイプは DB インスタンスクラスの一部
個人的に、調べ直して一番意外だったところです。
AWS ドキュメントには以下の記載があります。(文中の太字化はわたしによるもの。以降も同様です。)
DB インスタンスクラスは、DB インスタンスタイプとサイズの両方で構成されます。例えば、db.m6g は AWS Graviton2 プロセッサを搭載した汎用 DB インスタンスタイプですが、db.m6g.2xlarge は db.m6g インスタンスタイプ内の DB インスタンスクラスです。
正確な定義に則ると、DB インスタンスタイプはdb.m6g
といった部分のみを指すようです。上記のドキュメントは RDS のものですが、Aurora 向けのドキュメントでも同様の記述がありました。
わたしは特に気にせず EC2 の「インスタンスタイプ」と同じノリで「DB インスタンスタイプ」と呼んでしまっていたことがありました。
DB インスタンスクラスのことをインスタンスタイプって言っちゃう
本来の意味での DB インスタンスクラスを意図しながら「インスタンスタイプ」「DB インスタンスタイプ」と言ってしまうのはわたしだけではないようです。
RDS の「よくある質問」より。
DB インスタンスをどのように作成しますか?
(略)
AWS マネジメントコンソールを使用して DB インスタンスを起動するには、[RDS] をクリックし、次に [インスタンス] タブにある [DB インスタンスの起動] ボタンをクリックします。そこから、DB エンジンとバージョン、ライセンスモデル、インスタンスタイプ、ストレージタイプと量、およびプライマリユーザーの認証情報を含む DB インスタンスに対して、パラメータを指定できます。
ここで実際に選択できるのは「DBインスタンスクラス」です。
Aurora のよくある質問でも「DB インスタンスタイプ」の表現があります。
Q: Amazon Aurora DB インスタンスに関連するコンピューティングリソースはどのようにスケールしますか?
(略)
要求された変更は、指定されたメンテナンスウィンドウ中に適用されます。あるいは、[すぐに適用] フラグを使用すると、DB インスタンスタイプをすぐに変更できます。これらのオプションはいずれも、スケーリング操作が実行されている数分間の可用性に影響を与えます。保留中の他のシステム変更も適用されることにご注意ください。
サイズも含めて変更できるわけですから、ここでの DB インスタンスタイプは(厳密な意味での)DB インスタンスクラスを指しています。
そして、BlackBelt でもサイズまで含めたものを指して「DB インスタンスタイプ」という表現がされていました。
(https://pages.awscloud.com/rs/112-TZM-766/images/20180425_AWS-BlackBelt_RDS.pdf より)
特に気にせず EC2 の「インスタンスタイプ」と同じノリで「DB インスタンスタイプ」と呼んでしまってもいいかな、という気になってきました。
DB がつかない「インスタンスクラス」
単に「インスタンスクラス」という時は、より広い意味を指すようです。 *1
Amazon RDS は、3 種類のインスタンスクラス (汎用、メモリ最適化、バーストパフォーマンス) をサポートしています。
インスタンスクラスの中で、DB インスタンスタイプの中のアルファベットをとって「m クラス」「r クラス」といった表現がされるようです。
EC2 で言う(広い意味での)インスタンスファミリーに似た表現ですね。
EC2 と同じノリでインスタンスファミリーって言っちゃう
RDS でも「インスタンスファミリー」という表現はあるのか?と調べたところバッチリありました。
保有する DB インスタンスのクラスをスケールアップまたはスケールダウンした場合、予約はどうなりますか?
(略)
サイズの柔軟性を利用できる DB エンジンとライセンスモデル (MySQL、MariaDB、PostgreSQL、Amazon Aurora、Oracle の「自分のライセンス使用」) の予約は、同じデータベースエンジンとリージョンの同じインスタンスファミリー (M4、T2、R3 など) に含まれる、任意のサイズの実行中である DB インスタンスに、自動的に適用されます。また、予約はシングル AZ またはマルチ AZ 配置オプションのいずれかで実行されている DB インスタンスにも適用されます。
世代や追加機能をワイルドカード的に表してR* インスタンスファミリー
という表現もあるようでした。
Q: Parallel Query はすべてのインスタンスタイプに対して利用できますか?
いいえ。現時点では、Parallel Query は R* インスタンスファミリーのインスタンスで使用できます。
ただ、「DB インスタンスファミリー」という表現はどこでも見つけることはできませんでした。AWS ドキュメント上でも定義はなかったので、「意味は通じるけど正確な言葉ではない」といった位置づけでしょうか。
DB インスタンスタイプこと DB インスタンスクラスタイプ
冒頭で「DB インスタンスタイプは DB インスタンスクラスの一部」という確認をしましたが、DB インスタンスクラスタイプ という豪勢な表現もありました。
「インスタンスクラスタイプ」とされることもあります。
サイズ柔軟なリザーブド DB インスタンスは、そのインスタンスクラスタイプでしかスケールできません。例えば、db.r5.large のリザーブド DB インスタンスは db.r5.xlarge には適用できますが、db.r6g.large には適用できません。db.r5 と db.r6g は異なるインスタンスクラスタイプであるためです。
どちらも指している内容としては DB インスタンスタイプと同じですね。
「RDS インスタンスタイプ」なんてのもあるのか
EC2 サービスにおけるインスタンスは EC2 インスタンスです。
RDS サービスにおけるインスタンスは RDS インスタンスではなく DB インスタンス(あるいは RDS DB インスタンス)です。
しかし「RDS インスタンスタイプ」という表現が製品ページで大々的になされています。
他では同様の表現は見つけられなかったので、何でここだけ……?と不思議に思ったりします。非エンジニアの方への分かりやすさを優先した……?などと勝手に妄想しています。
終わりに
RDS の DB インスタンスクラスまわりの表現を調べ直してみました。
EC2 インスタンスタイプと同様、なかなかに表現にバラつきがあることが分かりました。そういうものだと割り切って、うまいこと付き合っていきましょう。
わたしも今度「変更前の DB インスタンスタイプを教えてください」と言われたら、「…………。…………、…………………… ………… db.r6g、2xlargeです。」と答えようと思います。
以上、 チバユキ (@batchicchi) がお送りしました。
脚注
- と思っていたら DB インスタンスクラスのことを指して「インスタンスクラス」としている例もありました。
リザーブド DB インスタンスを購入する際、指定する項目の 1 つはインスタンスクラス (db.r5.large など) です。
Amazon RDS 向けリザーブド DB インスタンス - Amazon Relational Database Service
バリエーションに事欠かないですね。 ↩